#include <stdio.h>
#include "cv.h"
#include "highgui.h"
#include "sobel.h"
#include <math.h>
#include <iostream>

using namespace std;


void get_properties(IplImage *workfile, const char *name)
{
  printf("-----------------------------------\n");
  printf("Nome:      %s\n", name);
  printf("Width:     %d\n", workfile->width);
  printf("Height:    %d\n", workfile->height);
  printf("Channels:  %d\n", workfile->nChannels);
  printf("Step:      %d\n", workfile->widthStep);
  printf("-----------------------------------\n\n");
}

	      

/////////////
// Esta função a seguir não é o Laplaciano. Laplaciano é apenas a soma
// das derivadas segunda nas duas direções ortogonais (i.e. x e
// y). Ele pode ser negativo, inclusive. E sendo um valor escalar, não
// tem "módulo". Módulo é o módulo do gradiente!... esse
// sqrt(x**2+y**2) é pra calcular módulo do gradiente, que não tem
// nenhum nome de matemático francês... Portanto, estou mudando o nome
// para "modulus"
// ++nicolau

// Esta função calcula o módulo dos vetores compostos pixel-a-pixel de
// duas imagens de entrada.
void modulus(IplImage *source1, IplImage *source2, IplImage *out)
{
  int i, j, k, c;
  int width,height,nchannels,step,byte1,byte2;
  uchar *data1,*data2,*data3;
  
  //get data
  width     = source1->width;
  height    = source1->height;
  nchannels = source1->nChannels;
  step      = source1->widthStep;
  data1     = ( uchar* )source1->imageData;
  data2     = ( uchar* )source2->imageData;
  data3     = ( uchar* )out->imageData;

  for ( i = 0; i < height; i++)
    {
      for ( j = 0; j < width; j++)
	{
	  for ( k = 0; k < nchannels; k++)
	    {
	      byte1 = data1[i*step + j*nchannels + k];
	      byte2 = data2[i*step + j*nchannels + k];
	      data3[i*step + j*nchannels + k] = sqrt(byte1*byte1 + byte2*byte2)-128;
	      //	      printf("%d\n",data3[i*step + j*nchannels +k]);
	    }
	}
    }
  
  //cvNamedWindow ("Test", 1);
  //cvShowImage ("Test", out);
  //c = cvWaitKey(0);
  //cvDestroyAllWindows();
}

	      
